const baseDao = require("./BaseDao");

const table = "users";

/**
 * 根据用户名和密码查询
 * @param code
 * @param password
 * @returns {Promise<*>}
 */
function login(account, password) {
  return baseDao.findOne(
    table,
    `where uaccount = '${account}' and upassword = '${password}'`
  );
}

/**
 * 分页查询
 * @param where 查询条件对象
 */
function findByPage(where) {
  return baseDao.findByPage(table, where);
}

/**
 *  自定义条件查询
 * @param where
 * @param columns
 * @returns {Promise<unknown>}
 */
function findBy(where) {
  return baseDao.findBy(table, where);
}

/**
 * 根据id搜索
 * @param id
 * @returns {Promise<*>}
 */
function findById(id) {
  return baseDao.findById(id, table);
}

/**
 * 根据users的id从users b、address a两表搜索
 * @param id
 * @returns {Promise<*>}
 */
function findAddress(id) {
  return baseDao.findAddress(
    id,
    table,
    `a.id,b.id uid,a.address,b.uaccount,b.uname,b.state,b.role`
  );
}

/**
 * 根据名字查找id
 * @param {*} name
 * @returns
 */
function findIdByName(name) {
  return baseDao.findOne(table, `where uname='${name}'`, "id");
}

/**
 * 根据名字查找id
 * @param {*} name
 * @returns
 */
function findWallet(name) {
  return baseDao.findOne(table, `where uname='${name}'`, "wallet");
}

/**
 * 查询数据总数
 * @param where
 * @returns {Promise<*>}
 */
function getCount(where) {
  return baseDao.getCount(table, where);
}

/**
 * 根据id删除数据
 * @param id
 * @returns {Promise<*>}
 */
function deleteById(id) {
  return baseDao.deleteById(table, id);
}

/**
 * 删除多个ids的数据
 * @param ids
 * @returns {Promise<*>}
 */
function deleteByIds(ids) {
  return baseDao.deleteByIds(table, ids);
}

/**
 * 插入数据到数据库中
 * @param obj
 * @returns {Promise<*>}
 */
function insert(obj) {
  return baseDao.insert(table, obj);
}

/**
 * 编辑
 * @param obj
 * @returns {Promise<*>}
 */
function update(obj) {
  return baseDao.update(table, obj);
}

/**
 * 根据uid搜索
 * @param uid
 * @returns {Promise<*>}
 */
function findByuid(uid) {
  return baseDao.findOne(table, ` where id = '${uid}'`,'id,uname,uaccount,state,role,isonline');
}
module.exports = {
  findByPage,
  findById,
  getCount,
  deleteById,
  deleteByIds,
  insert,
  update,
  login,
  findBy,
  findIdByName,
  findByuid,
  findAddress,
  findWallet
};
